home *** CD-ROM | disk | FTP | other *** search
- unit Array2U;
-
- interface
-
- uses
- WinProcs, WinTypes, Messages, SysUtils, Classes, Graphics, Controls,
- Forms, Dialogs, Grids, StdCtrls;
-
- const
- {$ifdef Win32}
- MaxSize = 2147483647 div SizeOf(Integer);
- {$else}
- MaxSize = 65535 div SizeOf(Integer);
- {$endif}
-
- type
- PIntegerArray = ^TIntegerArray;
- TIntegerArray = array[0..Pred(MaxSize)] of Integer;
-
- TArray2MainForm = class(TForm)
- ListBox1: TListBox;
- btnResizeArray: TButton;
- btnFillArray: TButton;
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure btnResizeArrayClick(Sender: TObject);
- procedure btnFillArrayClick(Sender: TObject);
- private
- SizeOfMyArray: Integer;
- MyArray: PIntegerArray;
- procedure DisplayArray;
- end;
-
- var
- Array2MainForm: TArray2MainForm;
-
- implementation
-
- {$R *.DFM}
-
- procedure TArray2MainForm.FormCreate(Sender: TObject);
- var
- Tmp: Integer;
- begin
- Tmp := StrToInt(InputBox('Enter your array dimensions',
- 'Number of elements:', '10'));
- if Tmp > MaxSize then
- raise Exception.Create('Array too big');
- SizeOfMyArray := Tmp;
- MyArray := AllocMem(SizeOfMyArray * SizeOf(Integer));
- btnFillArray.Click; { Pretend to push the array filling button }
- DisplayArray
- end;
-
- procedure TArray2MainForm.FormDestroy(Sender: TObject);
- begin
- FreeMem(MyArray, SizeOfMyArray * SizeOf(Integer));
- MyArray := nil
- end;
-
- procedure TArray2MainForm.btnResizeArrayClick(Sender: TObject);
- var
- Tmp: Integer;
- begin
- Tmp := StrToInt(InputBox('Enter your new array dimensions',
- 'Number of elements:', '20'));
- if Tmp > MaxSize then
- raise Exception.Create('Array too big');
- {$ifdef Win32}
- ReallocMem(MyArray, Tmp * SizeOf(Integer));
- if Tmp > SizeOfMyArray then
- FillChar(MyArray^[SizeOfMyArray], (Tmp - SizeOfMyArray) * SizeOf(Integer), 0);
- {$else}
- MyArray := ReallocMem(MyArray, SizeOfMyArray * SizeOf(Integer), Tmp * SizeOf(Integer));
- {$endif}
- SizeOfMyArray := Tmp;
- DisplayArray
- end;
-
- procedure TArray2MainForm.btnFillArrayClick(Sender: TObject);
- var
- Loop: Integer;
- begin
- for Loop := 0 to Pred(SizeOfMyArray) do
- MyArray^[Loop] := Loop;
- DisplayArray
- end;
-
- procedure TArray2MainForm.DisplayArray;
- var
- Loop: Integer;
- begin
- with ListBox1, Items do
- begin
- BeginUpdate;
- try
- Clear;
- for Loop := 0 to Pred(SizeOfMyArray) do
- Add(IntToStr(MyArray^[Loop]));
- ItemIndex := Pred(SizeOfMyArray)
- finally
- EndUpdate
- end
- end
- end;
-
- end.
-